//这里是用户 注册和登录页面的共用仓库


//引入请求数据的方法
import { reqGetCode, reqGetRegister, reqLogin, reqGetUserInfo, reqLogout } from "@/api"
import { setToken, clearToken } from "@/utils/token"

const actions = {
  //派发请求验证码
  async getCode({ commit }, phone) {
    //await 等待promise 返回的结果
    let result = await reqGetCode(phone)
    if (result.code == 200) {
      commit('GETCODE', result.data)
    }
  },
  //派发立即注册
  async getRegister({ commit }, data) {
    let result = await reqGetRegister(data)
    console.log(result);
    if (result.code == 200) {
      return 'ok'
    } else {
      return Promise.reject(new(Error('falie')))
    }
  },
  //登录的接口 并获取到token  且保存到vuex  和 本地里
  async UserLogin({ commit }, data) {
    let result = await reqLogin(data)
      //这里拿到服务器返回的数据，数据里面携带了token  先把token存在仓库里  也要本地存储
    if (result.code == 200) {
      setToken(result.data.token)
      commit('USERLOGIN', result.data)
      return 'ok'
    } else {
      return Promise.reject(new Error('faile'))
    }

  },
  //用token 作为标识符 请求用户的信息
  async getUserInfo({ commit }) {
    let result = await reqGetUserInfo()
      //这里拿不到数据显示未登入 因为我们请求并没有把token带过去，所以要在请求头里面添加
      //我们在首页中调用了这个接口
    if (result.code == 200) {
      commit('GETUSERINFO', result.data)
    }

  },
  //退出登录的时候派发的actions
  async logOut({ commit }) {
    let result = await reqLogout()
    if (result.code == 200) {
      //成功之后会去除掉现在的token 但是还不够 我们还需要清除掉我们本地保存的token 
      //以及我们保存在vuex中的token 和userInfo的数据
      //这里需要注意的是 我们清除vuex中state的数据，只能通过mutations去清除
      clearToken()
      commit('Clear')
      return 'ok'
    } else {
      return Promise.reject(new Error('faile'))
    }
  }

}
const mutations = {
  //提交请求验证码
  GETCODE(state, code) {
    state.code = code
  },
  //提交服务器返回的token 存到仓库中
  USERLOGIN(state, token) {
    state.token = token.token
  },
  //提交用户的信息到仓库中
  GETUSERINFO(state, userInfo) {
    state.userInfo = userInfo
  },
  //清除state中的token  和  info
  Clear(state) {
    state.token = '',
      state.userInfo = {}
  }
}
const state = {
  //验证码数据
  code: '',
  token: localStorage.getItem('TOKEN'),
  userInfo: {}
}
const getters = {}


export default { actions, mutations, state, getters }